#include "common_head.h"
#include "command.h"
#include <string.h> 

/**
 * 发送 remove 命令给服务器
 * @param cur_path 当前工作路径
 * @param msg 命令结构体指针
 * @param socket_fd 套接字文件描述符
 */
void send_remove_message(char *cur_path, data *msg, int socket_fd) {
    char cur_path_tmp[2048] = {0};
    
    // 如果命令的 args（即文件名）为空
    if (msg->args[0] == '\0') {
        printf("文件名不能为空\n");
        return;
    }

    // 检查 args 是否是以 '/' 开头（即是否为绝对路径）
    if (msg->args[0] == '/') {
        // 如果 args 是绝对路径，直接使用

    } else {
        // 拼接相对路径，得到完整的路径
        char full_path[3072] = {0};
        snprintf(full_path, sizeof(full_path), "%s/%s", cur_path, msg->args);
        strcpy(msg->args, full_path);
    }

    // 发送命令数据给服务器
    ssize_t sent = send(socket_fd, msg, sizeof(data), 0);
    if (sent < 0) {
        perror("发送 remove 消息失败");
        return;
    }
}

/**
 * 接收 remove 命令的响应
 * @param socket_fd 套接字文件描述符
 * @param response 命令结构体指针
 */
void recv_remove_message(int socket_fd, data *response) {
    // 接收响应
    ssize_t bytes_received = recv(socket_fd, response, sizeof(data), MSG_WAITALL);
    if (bytes_received < 0) {
        if (bytes_received == 0) {
            printf("连接被对端关闭\n");
            
        } else {
            perror("接收数据出错");
        }
        return;
    }

    // 确保接收到的数据大小正确
    if (bytes_received != sizeof(data)) {
        printf("接收到的数据不完整\n");
        
        return;
    }

    // 处理服务器的响应
    if (strcmp(response->command, "success") == 0) {
        
    } else if (strcmp(response->command, "failure") == 0) {
        printf("删除文件失败\n");
        
    } else if (strcmp(response->command, "invalid") == 0) {
        printf("无效的命令或路径\n");
       
    } else {
        printf("未知的响应: %s\n", response->command);
    }
}
